<!doctype html>



  


<html class="theme-next pisces use-motion" lang="zh-Hans">
<head>
  <meta charset="UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/>









<meta http-equiv="Cache-Control" content="no-transform" />
<meta http-equiv="Cache-Control" content="no-siteapp" />















  
  
  <link href="/lib/fancybox/source/jquery.fancybox.css?v=2.1.5" rel="stylesheet" type="text/css" />




  
  
  
  

  
    
    
  

  

  

  

  

  
    
    
    <link href="//fonts.googleapis.com/css?family=Lato:300,300italic,400,400italic,700,700italic&subset=latin,latin-ext" rel="stylesheet" type="text/css">
  






<link href="/lib/font-awesome/css/font-awesome.min.css?v=4.6.2" rel="stylesheet" type="text/css" />

<link href="/css/main.css?v=5.1.1" rel="stylesheet" type="text/css" />


  <meta name="keywords" content="java," />








  <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico?v=5.1.1" />






<meta name="description" content="前言在之前Java基础知识回顾中，我们回顾了基础数据类型、修饰符和String、三大特性、集合、多线程和IO。本篇文章则对之前学过的知识进行总结。除了简单的复习之外，还会增加一些相应的理解。 基础数据类型基本数据类型主要有:byte、short、int、long、float、double、char、boolean它们可以分为三类:  数值类型:byte、short、int、long、float、">
<meta name="keywords" content="java">
<meta property="og:type" content="article">
<meta property="og:title" content="Java基础知识回顾之七 ----- 总结篇">
<meta property="og:url" content="http://yoursite.com/2018/06/27/pancm86/index.html">
<meta property="og:site_name" content="虚无境的博客">
<meta property="og:description" content="前言在之前Java基础知识回顾中，我们回顾了基础数据类型、修饰符和String、三大特性、集合、多线程和IO。本篇文章则对之前学过的知识进行总结。除了简单的复习之外，还会增加一些相应的理解。 基础数据类型基本数据类型主要有:byte、short、int、long、float、double、char、boolean它们可以分为三类:  数值类型:byte、short、int、long、float、">
<meta property="og:updated_time" content="2018-08-19T14:22:34.000Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Java基础知识回顾之七 ----- 总结篇">
<meta name="twitter:description" content="前言在之前Java基础知识回顾中，我们回顾了基础数据类型、修饰符和String、三大特性、集合、多线程和IO。本篇文章则对之前学过的知识进行总结。除了简单的复习之外，还会增加一些相应的理解。 基础数据类型基本数据类型主要有:byte、short、int、long、float、double、char、boolean它们可以分为三类:  数值类型:byte、short、int、long、float、">



<script type="text/javascript" id="hexo.configurations">
  var NexT = window.NexT || {};
  var CONFIG = {
    root: '/',
    scheme: 'Pisces',
    sidebar: {"position":"left","display":"post","offset":12,"offset_float":0,"b2t":false,"scrollpercent":false},
    fancybox: true,
    motion: true,
    duoshuo: {
      userId: '0',
      author: '博主'
    },
    algolia: {
      applicationID: '',
      apiKey: '',
      indexName: '',
      hits: {"per_page":10},
      labels: {"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}
    }
  };
</script>



  <link rel="canonical" href="http://yoursite.com/2018/06/27/pancm86/"/>






  <title>Java基础知识回顾之七 ----- 总结篇 | 虚无境的博客</title>
  





  <script type="text/javascript">
    var _hmt = _hmt || [];
    (function() {
      var hm = document.createElement("script");
      hm.src = "https://hm.baidu.com/hm.js?39c177d10f6e05ddfa113e02139b9c1c";
      var s = document.getElementsByTagName("script")[0];
      s.parentNode.insertBefore(hm, s);
    })();
  </script>










</head>

<body itemscope itemtype="http://schema.org/WebPage" lang="zh-Hans">

  
  
    
  

  <div class="container sidebar-position-left page-post-detail ">
    <div class="headband"></div>

    <header id="header" class="header" itemscope itemtype="http://schema.org/WPHeader">
      <div class="header-inner"><div class="site-brand-wrapper">
  <div class="site-meta ">
    

    <div class="custom-logo-site-title">
      <a href="/"  class="brand" rel="start">
        <span class="logo-line-before"><i></i></span>
        <span class="site-title">虚无境的博客</span>
        <span class="logo-line-after"><i></i></span>
      </a>
    </div>
      
        <p class="site-subtitle"></p>
      
  </div>

  <div class="site-nav-toggle">
    <button>
      <span class="btn-bar"></span>
      <span class="btn-bar"></span>
      <span class="btn-bar"></span>
    </button>
  </div>
</div>

<nav class="site-nav">
  

  
    <ul id="menu" class="menu">
      
        
        <li class="menu-item menu-item-home">
          <a href="/" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-home"></i> <br />
            
            首页
          </a>
        </li>
      
        
        <li class="menu-item menu-item-categories">
          <a href="/categories/" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-th"></i> <br />
            
            分类
          </a>
        </li>
      
        
        <li class="menu-item menu-item-archives">
          <a href="/archives/" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-archive"></i> <br />
            
            归档
          </a>
        </li>
      
        
        <li class="menu-item menu-item-tags">
          <a href="/tags/" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-tags"></i> <br />
            
            标签
          </a>
        </li>
      
        
        <li class="menu-item menu-item-about">
          <a href="/about/" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-user"></i> <br />
            
            关于
          </a>
        </li>
      

      
    </ul>
  

  
</nav>



 </div>
    </header>

    <main id="main" class="main">
      <div class="main-inner">
        <div class="content-wrap">
          <div id="content" class="content">
            

  <div id="posts" class="posts-expand">
    

  

  
  
  

  <article class="post post-type-normal " itemscope itemtype="http://schema.org/Article">
    <link itemprop="mainEntityOfPage" href="http://yoursite.com/2018/06/27/pancm86/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="name" content="虚无境">
      <meta itemprop="description" content="">
      <meta itemprop="image" content="/images/xuwujing.png">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="虚无境的博客">
    </span>

    
      <header class="post-header">

        
        
          <h1 class="post-title" itemprop="name headline">Java基础知识回顾之七 ----- 总结篇</h1>
        

        <div class="post-meta">
          <span class="post-time">
            
              <span class="post-meta-item-icon">
                <i class="fa fa-calendar-o"></i>
              </span>
              
                <span class="post-meta-item-text">发表于</span>
              
              <time title="创建于" itemprop="dateCreated datePublished" datetime="2018-06-27T22:41:52+08:00">
                2018-06-27
              </time>
            

            

            
          </span>

          
            <span class="post-category" >
            
              <span class="post-meta-divider">|</span>
            
              <span class="post-meta-item-icon">
                <i class="fa fa-folder-o"></i>
              </span>
              
                <span class="post-meta-item-text">分类于</span>
              
              
                <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
                  <a href="/categories/java/" itemprop="url" rel="index">
                    <span itemprop="name">java</span>
                  </a>
                </span>

                
                
              
            </span>
          

          
            
          

          
          

          

          

          

        </div>
      </header>
    

    <div class="post-body" itemprop="articleBody">

      
      

      
        <script src="\assets\js\APlayer.min.js"> </script><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>在之前Java基础知识回顾中，我们回顾了基础数据类型、修饰符和String、三大特性、集合、多线程和IO。本篇文章则对之前学过的知识进行总结。除了简单的复习之外，还会增加一些相应的理解。</p>
<h2 id="基础数据类型"><a href="#基础数据类型" class="headerlink" title="基础数据类型"></a>基础数据类型</h2><p>基本数据类型主要有:<br><strong>byte、short、int、long、float、double、char、boolean</strong><br>它们可以分为三类:</p>
<ol>
<li>数值类型:<strong>byte、short、int、long、float、double</strong></li>
<li>字符类型:<strong>char</strong></li>
<li>布尔型:<strong>boolean</strong></li>
</ol>
<p>其中byte是8位，short是16位， int是32位以及 long是64的整数；而float  32位，double 64 位的浮点数。<br>数值类型的级别从低到高分别为：<br><strong>byte,char,short(这三个平级)——&gt;int——&gt;float——&gt;long——&gt;double</strong><br>其中由低级别转到高级别，是属于<strong>自动类型转换</strong>，这点是由系统自动转换的。在进行计算的时候，如果级别小于int，最终的数据类型会自动转换为int，如果高于int，最终数据结果会取其中最高的一个。<br>又高级别转到低级别是<strong>强制类型转换</strong>。<strong>强制类型转换</strong>需要注意<strong>取值范围</strong>和数据的<strong>精确度</strong>。</p>
<p><strong>char</strong>是字符类型，可以储存任何字符。<br> <strong>boolean</strong>是布尔类型，只有false或true。</p>
<p>基础数据类型更详细的说明:<a href="http://www.panchengming.com/2018/03/18/pancm76/" target="_blank" rel="external">http://www.panchengming.com/2018/03/18/pancm76/</a></p>
<p>一般我们在用基础数据类型的时候，也会用到包装类型。<br>这里顺便说下包装类型，也来弥补之前的文章讲述不足。</p>
<p><strong>什么是包装类型?包装类型和基础数据类型的关系。</strong><br>包装类就是基本类型数据转换为对象的一种类型。</p>
<p>每个基本类型在java.lang包中都有一个相应的包装类。<br><strong>基础数据类型:</strong><br><strong>boolean，  char， byte，short，int，  long，   float，double</strong><br><strong>分别对应的包装数据类型:</strong><br><strong>Boolean，Character，Byte，Short，Integer，Long，Float，Double</strong></p>
<p><strong>包装类型有什么用</strong>？</p>
<ol>
<li><p>利于实现基本类型之间的转换;<br>因为我们了解到基本数据类型之间的相互转换分为<strong>自动类型转换</strong>和<strong>强制类型转换</strong>，<strong>自动类型转换</strong>还好，但是<strong>强制类型转换</strong>容易出现问题。所以出现了包装类型，它可以很方便的帮助转换。<br>例如: String类型的转int类型可以通过 <strong>Integer.parseInt()</strong>转换成int，或使用<strong>Integer.valueOf()</strong>转换成Integer类型。</p>
</li>
<li><p>便于函数传值;<br>为什么说方面函数传值呢？假如一个方法的入参是Object 类型， 但是你的入参是个int类型，是无法直接调用这个方法的，所以这时便可以将int类型的数据进行包装成Integer类型，在进行调用便可以了。其实除了这个示例，比较常见的是我们的pojo类型，一般会使用包装类型，这样的话在便可以使用null来进行判断。不止这些，在集合的List、Map和Set等等泛型中的类型是，用的是包装类型，例如:  <code>Map&lt;String,Integer&gt; map=new HashMap&lt;String,Integer&gt;();</code></p>
</li>
</ol>
<p><strong>注意:在使用包装数据类型进行值比较的时候，用equals进行比较，不要用==。</strong>例如:</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div></pre></td><td class="code"><pre><div class="line">Integer a=127;</div><div class="line">Integer b=127;</div><div class="line">Integer c=128;</div><div class="line">Integer d=128;</div><div class="line">System.out.println(a == b);</div><div class="line">System.out.println(a.equals(b));</div><div class="line">System.out.println(c == d);</div><div class="line">System.out.println(c.equals(d));</div></pre></td></tr></table></figure>
<p>输出结果:</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">true</div><div class="line">true</div><div class="line">false</div><div class="line">true</div></pre></td></tr></table></figure>
<h2 id="修饰符"><a href="#修饰符" class="headerlink" title="修饰符"></a>修饰符</h2><p>Java修饰符主要分为两类:</p>
<ul>
<li>访问修饰符</li>
<li>非访问修饰符</li>
</ul>
<p>其中访问修饰符主要包括 private、default、protected、public。<br>非访问修饰符主要包括 static、final、abstract、synchronized。</p>
<h3 id="访问修饰符"><a href="#访问修饰符" class="headerlink" title="访问修饰符"></a>访问修饰符</h3><p>访问修饰符的访问权限:<br>| 修饰符     |    当前类 | 同一包内  | 子类  | 其它包 |<br>| :—–:   | :—–:| :——: | :—-:| :—: |<br>| public    | Y      |  Y       |    Y   |     Y   |<br>| protected    |   Y    |  Y       |    Y   |    N    |<br>| default    |   Y    | Y        |   N   |    N   |<br>| private    |   Y    | N        |   N   |    N   |</p>
<h3 id="非访问修饰符"><a href="#非访问修饰符" class="headerlink" title="非访问修饰符"></a>非访问修饰符</h3><p><strong>static</strong>: 用来修饰类变量和类方法。<br><strong>修饰变量</strong></p>
<blockquote>
<p>static在修饰类变量的时候，无论该类被实例化了多少次，它的静态变量只有一份拷贝。静态变量也被称为类变量。局部变量是不能被声明为static变量的。</p>
</blockquote>
<p><strong>修饰方法</strong></p>
<blockquote>
<p>static在修饰类方法的时候，静态方法是不能使用类的非静态变量。静态方法可以直接通过类名调用，因此静态方法中是不能用<strong>this</strong>和<strong>super</strong>关键字的。</p>
</blockquote>
<p><strong>final</strong> :用来修饰类、方法和变量。</p>
<blockquote>
<p>final 修饰的类不能够被继承，修饰的方法不能被继承类重新定义，修饰的变量为常量，是不可修改的。</p>
</blockquote>
<p><strong>abstract</strong> ：用来创建抽象类和抽象方法。<br><strong>修饰类</strong></p>
<blockquote>
<p> 会使这个类成为一个抽象类，这个类将不能生成对象实例，但可以做为对象变量声明的类型（见后面实例），也就是编译时类型。抽象类就相当于一类的半成品，需要子类继承并覆盖其中的抽象方法。</p>
</blockquote>
<p><strong>修饰方法</strong></p>
<blockquote>
<p>会使这个方法变成抽象方法，也就是只有声明而没有实现，需要子类继承实现。</p>
</blockquote>
<p><strong>synchronized</strong>: 修饰的方法同一时间只能被一个线程访问。</p>
<p><strong>transient</strong>:被 transient 修饰的实例变量时，java 虚拟机(JVM)跳过该特定的变量。</p>
<p><strong>native</strong>: 被native修饰的方法实际是由另一种语言进行实现的本地方法</p>
<p>修饰符更详细的说明:<a href="http://www.panchengming.com/2018/03/24/pancm77/" target="_blank" rel="external">http://www.panchengming.com/2018/03/24/pancm77/</a></p>
<h2 id="三大特性"><a href="#三大特性" class="headerlink" title="三大特性"></a>三大特性</h2><h3 id="封装"><a href="#封装" class="headerlink" title="封装"></a>封装</h3><blockquote>
<p>封装可以被认为是一个保护屏障，防止该类的代码和数据被外部类定义的代码随机访问。要访问该类的代码和数据，必须通过严格的接口控制。</p>
</blockquote>
<p> <strong>使用封装的好处</strong></p>
<ol>
<li><p>良好的封装能够减少耦合。</p>
</li>
<li><p>类内部的结构可以自由修改。</p>
</li>
<li><p>可以对成员变量进行更精确的控制。</p>
</li>
<li><p>隐藏信息，实现细节。</p>
</li>
</ol>
<h3 id="继承"><a href="#继承" class="headerlink" title="继承"></a>继承</h3><blockquote>
<p>继承是java面向对象编程技术的一块基石，因为它允许创建分等级层次的类。<br>继承就是子类继承父类的特征和行为，使得子类对象（实例）具有父类的实例域和方法，或子类从父类继承方法，使得子类具有父类相同的行为。</p>
</blockquote>
<p><strong>优缺点</strong></p>
<blockquote>
<p>虽然继承大大提升了代码的复用性，但是也提高了类之间的耦合性！</p>
</blockquote>
<h3 id="多态"><a href="#多态" class="headerlink" title="多态"></a>多态</h3><blockquote>
<p>多态是指事物在运行过程中存在不同的状态。</p>
</blockquote>
<p><strong>多态的优点</strong></p>
<ol>
<li>可替换性（substitutability）。多态对已存在代码具有可替换性。例如，多态对圆Circle类工作，对其他任何圆形几何体，如圆环，也同样工作。</li>
<li>可扩充性（extensibility）。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性，以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。例如，在实现了圆锥、半圆锥以及半球体的多态基础上，很容易增添球体类的多态性。</li>
<li>接口性（interface-ability）。多态是超类通过方法签名，向子类提供了一个共同接口，由子类来完善或者覆盖它而实现的。</li>
<li>灵活性（flexibility）。它在应用中体现了灵活多样的操作，提高了使用效率。</li>
<li>简化性（simplicity）。多态简化对应用软件的代码编写和修改过程，尤其在处理大量对象的运算和操作时，这个特点尤为突出和重要。</li>
</ol>
<p>三大特性更详细的说明:<a href="http://www.panchengming.com/2018/03/24/pancm78/" target="_blank" rel="external">http://www.panchengming.com/2018/03/24/pancm78/</a></p>
<h2 id="集合"><a href="#集合" class="headerlink" title="集合"></a>集合</h2><h3 id="List"><a href="#List" class="headerlink" title="List"></a>List</h3><blockquote>
<p> List 接口是继承于 Collection接口并定义    一个允许重复项的有序集合。该接口不但能够对列表的一部分进行处理，还添加了面向位置的操作。</p>
</blockquote>
<h4 id="List的常用类"><a href="#List的常用类" class="headerlink" title="List的常用类"></a>List的常用类</h4><ul>
<li>ArrayList：内部是通过数组实现的，它允许对元素进行快随机访问。当从ArrayList的中间位置插入或者删除元素时，需要对数组进行复制、移动、代价比较高。因此，它适合随机查找和遍历，不适合插入和删除。</li>
<li>LinkedList: 则是链表结构存储数据的，很适合数据的动态插入和删除，随机访问和遍历速度比较慢。另外，他还提供了List接口中没有定义的方法，专门用于操作表头和表尾元素，可以当作堆栈、队列和双向队列使用。</li>
<li>Vector: 通过数组实现的，不同的是它支持线程的同步。访问速度ArrayList慢。</li>
</ul>
<p>推荐单线程使用ArrayList进行查询和遍历，LinkedList进行插入和删除。<br>多线程使用Collections.synchronizedList方法对List上锁，效率比Vector高。</p>
<h3 id="Map"><a href="#Map" class="headerlink" title="Map"></a>Map</h3><blockquote>
<p><strong>Map 接口并不是 Collection 接口的继承</strong>。Map提供key到value的映射。一个Map中不能包含相同的key，每个key只能映射一个value。Map接口提供3种集合的视图，Map的内容可以被当作一组key集合，一组value集合，或者一组key-value映射。</p>
</blockquote>
<h4 id="Map常用类"><a href="#Map常用类" class="headerlink" title="Map常用类"></a>Map常用类</h4><ul>
<li><strong>HashMap</strong>: HashMap的键是根据HashCode来获取，所以根据键可以很快的获取相应的值。不过它的键对象是不可以重复的，它允许键为Null，但是最多只能有一条记录，不过却是可以允许多条记录的值为Null。因为HashMap是非线程安全的，所以它的效率很高。</li>
<li><strong>TreeMap</strong>:可以将保存的记录根据键进行排序，默认是按键值的升序排序（自然顺序）。也可以指定排序的比较器，当用Iterator遍历TreeMap时，得到的记录是排过序的。它也是不允许key值为空，并且不是线程安全的。</li>
<li><strong>LinkedHashMap</strong>:LinkedHashMap基本和HashMap一致。不过区别在与LinkedHashMap是维护一个双链表，可以将里面的数据按写入                        的顺序读出。可以认为LinkedHashMap是HashMap+LinkedList。即它既使用HashMap操作数据结构，又使用LinkedList维护插入元素的先后顺序。它也不是线程安全的。</li>
<li><strong>Hashtable</strong>:Hashtable与HashMap类似，可以说是HashMap的线程安全版。不过它是不允许记录的键或者值为null。因为它支持线程的同步，是线程安全的，所以也导致了Hashtale在效率较低。</li>
<li><strong>ConcurrentHashMap</strong>: ConcurrentHashMap在Java 1.5作为Hashtable的替代选择新引入的。使用锁分段技术技术来保证线程安全的，可以看作是Hashtable的升级版。</li>
</ul>
<p>推荐单线程随机查询用HashMap，自然顺序或自定义顺序用TreeMap，插入和删除用LinkedHashMap。<br>多线程推荐使用ConcurrentHashMap。</p>
<h3 id="Set"><a href="#Set" class="headerlink" title="Set"></a>Set</h3><blockquote>
<p>Set是一种不包含重复的元素的Collection，即任意的两个元素e1和e2都有e1.equals(e2)=false，Set最多有一个null元素。因为Set是一个抽象的接口，所以是不能直接实例化一个set对象。<code>Set s = new Set()</code> 这种写法是错误的。</p>
</blockquote>
<p>推荐单线程随机查询用HashSet，自然顺序或自定义顺序用TreeSet，插入和删除用LinkedHashSet。</p>
<p> 集合更详细的说明:<a href="http://www.panchengming.com/2018/04/19/pancm80/" target="_blank" rel="external">http://www.panchengming.com/2018/04/19/pancm80/</a></p>
<h2 id="多线程"><a href="#多线程" class="headerlink" title="多线程"></a>多线程</h2><blockquote>
<p>多线程是指在同一程序中有多个顺序流在执行。 简单的说就是在一个程序中有多个任务运行。</p>
</blockquote>
<h3 id="线程的状态"><a href="#线程的状态" class="headerlink" title="线程的状态"></a>线程的状态</h3><p>创建（new）状态: 准备好了一个多线程的对象<br>就绪（runnable）状态: 调用了start()方法, 等待CPU进行调度<br>运行（running）状态: 执行run()方法<br>阻塞（blocked）状态: 暂时停止执行, 可能将资源交给其它线程使用<br>终止（dead）状态: 线程销毁</p>
<h3 id="线程的创建"><a href="#线程的创建" class="headerlink" title="线程的创建"></a>线程的创建</h3><ul>
<li>通过实现 Runnable 接口；</li>
<li>通过继承 Thread 类本身；</li>
<li>通过实现 Callable接口，然后与Future 和创建线程。</li>
</ul>
<p>注:线程启动的方法是start而不是run。<br>推荐创建单线程的时候使用继承 Thread 类方式创建，多线线程的时候使用Runnable、Callable 接口的方式来创建创建线程。</p>
<h3 id="线程的常用方法"><a href="#线程的常用方法" class="headerlink" title="线程的常用方法"></a>线程的常用方法</h3><ol>
<li>sleep：在指定的毫秒数内让当前正在执行的线程休眠（暂停执行），不会释放对象锁。</li>
<li>join：指等待t线程终止。</li>
<li>yield：暂停当前正在执行的线程对象，并执行其他线程。</li>
<li>setPriority：设置一个线程的优先级。</li>
<li>interrupt：一个线程是否为守护线程。</li>
<li>wait：强迫一个线程等待。它是Object的方法，也常常和sleep作为比较。需要注意的是wait会释放对象锁，让其它的线程可以访问；使用wait必须要进行异常捕获，并且要对当前所调用，即必须采用synchronized中的对象。</li>
<li>isAlive: 判断一个线程是否存活。</li>
<li>activeCount: 程序中活跃的线程数。 </li>
<li>enumerate: 枚举程序中的线程。</li>
<li>currentThread: 得到当前线程。</li>
<li>setDaemon: 设置一个线程为守护线程。(用户线程和守护线程的区别在于，是否等待主线程依赖于主线程结束而结束)。</li>
<li>setName: 为线程设置一个名称。</li>
<li>notify(): 通知一个线程继续运行。它也是Object的一个方法，经常和wait方法一起使用。</li>
</ol>
<p>多线程更详细的说明:<a href="http://www.panchengming.com/2018/05/28/pancm84/" target="_blank" rel="external">http://www.panchengming.com/2018/05/28/pancm84/</a></p>
<p>多线程中经常会使用这几个关键字<strong>synchronized</strong>、<strong>lock</strong>和<strong>volatile</strong>。<br><strong>synchronized</strong>: synchronized是JVM级别的，也就是在运行期由JVM解释的。它是阻塞锁(也就是在同一时间只会有一个线程持有)；也是非公平锁(也就是不遵循先来后到的原则，当一个线程A持有锁，而线程B、C处于阻塞状态时，若线程A释放锁，JVM将从线程B、C随机选择一个线程持有锁并使其获得执行权)。可以保证原子性、可见性以及有序性。</p>
<p><strong>lock</strong>:  lock是通过编码实现的。它是非阻塞锁；也是公平锁。可以保证原子性、可见性以及有序性。相比synchronized，更加灵活和强大。</p>
<p><strong>volatile</strong>:轻量级的锁。主要用户保证共享变量对所有线程的可见性，以及禁止指令重排序)。因为无法保证原子性，所以并不能保证线程安全。</p>
<p><strong>线程安全与共享资源</strong><br>1.局部变量中的基本数据类型(8种)永远是线程安全的。<br>2.局部变量中的对象类型只要不会被其他线程访问到，也是线程安全的。<br>3.一个对象实例被多个线程同时访问时，他的成员变量就可能是线程不安全的。</p>
<h2 id="IO流"><a href="#IO流" class="headerlink" title="IO流"></a>IO流</h2><blockquote>
<p>IO的名称又来是Input与Output的缩写，也就是输入流和输出流。输入流用于从源读取数据，输出流用于向目标写数据。</p>
</blockquote>
<h3 id="字符流"><a href="#字符流" class="headerlink" title="字符流"></a>字符流</h3><p>字符流有两个抽象类：<strong>Writer</strong>和<strong>Reader</strong>类。<br>其对应子类<strong>FileWriter</strong>和<strong>FileReader</strong>可实现文件的读写操作。<br><strong>BufferedWriter</strong>和<strong>BufferedReader</strong>能够提供缓冲区功能，用以提高效率。</p>
<h3 id="字节流"><a href="#字节流" class="headerlink" title="字节流"></a>字节流</h3><p>字节流也有两个抽象类：<strong>InputStream</strong>和<strong>OutputStream</strong>类。<br>其对应子类有<strong>FileInputStream</strong>和<strong>FileOutputStream</strong>实现文件读写操作。<br><strong>BufferedInputStream</strong>和<strong>BufferedOutputStream</strong>提供缓冲区功能</p>
<p>推荐读取文本用<strong>字符流</strong>,读取图片、视频和图片等二进制文件用<strong>字节流</strong>。</p>
<p>IO流更详细的说明:<a href="http://www.panchengming.com/2018/06/16/pancm85/" target="_blank" rel="external">http://www.panchengming.com/2018/06/16/pancm85/</a></p>
<p>说起IO流，顺便谈下它的几个孪生兄弟，NIO、BIO和AIO。</p>
<p><strong>IO：</strong></p>
<blockquote>
<p>阻塞的，从硬盘读取数据时，程序一直等待，数据读完在继续操作 。<br>操作时一次一个字节的读取数据，一个输出流一次输出一个字节数据，一个输出流一次消耗一个字节数据，数据的读取和写入效率不好。<br>I/O属于底层操作，性能依赖与系统环境。</p>
</blockquote>
<p><strong>NIO：</strong></p>
<blockquote>
<p>同步非阻塞I/O，在读取数据时程序可以继续执行，读取玩数据以后，通知当前程序（即硬件的中断，软件中的回调），然后程序立即或执行完后处理数据。选择器（selector）、缓冲（buffer）、管道（channel） 面向块（缓冲区）。采取“预读方式”。操作中一步产生或消费一个数据块，按块处理数据，同时数据读取到一个稍后可能会处理的缓冲区，需要时也可在缓冲区前后移动。<br>方式适用于连接数目多且连接比较短（轻操作）的架构。例如聊天工具。毕竟好用的框架Netty和Mina。</p>
</blockquote>
<p><strong>BIO:</strong> </p>
<blockquote>
<p>同步并阻塞，服务器实现模式为一个连接一个线程，即客户端有连接请求时服务器端就需要启动一个线程进行处理，如果这个连接不做任何事情会造成不必要的线程开销，当然可以通过线程池机制改善。<br>方式适用于连接数目比较小且固定的架构</p>
</blockquote>
<p><strong>AIO:</strong></p>
<blockquote>
<p>异步非阻塞，服务器实现模式为一个有效请求一个线程，客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理.。<br>方式使用于连接数目多且连接比较长（重操作）的架构。</p>
</blockquote>
<p>简单的介绍了下这些知识。详细的可以查看这篇文章:<a href="https://blog.csdn.net/huangwenyi1010/article/details/75577091?ref=myread" target="_blank" rel="external">https://blog.csdn.net/huangwenyi1010/article/details/75577091?ref=myread</a> </p>
<h2 id="其它"><a href="#其它" class="headerlink" title="其它"></a>其它</h2><p>Java基础知识的总结篇就介绍到这里了，以后的博文主要编写的方向是Java的进阶知识了，主要内容为设计模式，源码解析和并发编程这块吧！至于后面的这些博文没有信心能够写好，毕竟这些相对于来说还是比较难以理解的。所以以后的这些相关博文我会按照自己的理解写的，如果写的不好，还请多多指点！</p>
<p>原创不易，如果感觉不错，希望给个推荐！您的支持是我写作的最大动力！<br>版权声明:<br>作者：虚无境<br>博客园出处：<a href="http://www.cnblogs.com/xuwujing" target="_blank" rel="external">http://www.cnblogs.com/xuwujing</a><br>CSDN出处：<a href="http://blog.csdn.net/qazwsxpcm" target="_blank" rel="external">http://blog.csdn.net/qazwsxpcm</a>　　　　<br>个人博客出处：<a href="http://www.panchengming.com" target="_blank" rel="external">http://www.panchengming.com</a> </p>

      
    </div>

    <div>
      
        

      
    </div>

    <div>
      
        

      
    </div>

    <div>
      
        

      
    </div>
     
    <div>
	 +
	  
<div style="text-align:center;color: #ccc;font-size:14px;">
------ 本文结束 ------</div>
<br/>
<div style="border: 1px solid black">
<div style="margin-left:10px">
<span style="font-weight:blod">版权声明</span>
<!-- <img src="/images/xuwujing.png" > -->
<br/>
<p style="font-size: 10px;line-height: 30px"><a href="http://www.panchengming.com/" style="color:#258FC6">xuwujing's Notes</a> by <a href="http://www.panchengming.com/" style="color:#258FC6">ChengMing Pan</a> is licensed under a <a href="https://creativecommons.org/licenses/by-nc-nd/4.0/" style="color:#258FC6">Creative Commons BY-NC-ND 4.0 International License</a>.<br/>
由<a href="http://www.panchengming.com/" style="color:#258FC6">虚无境</a>创作并维护的<a href="http://www.panchengming.com/" style="color:#258FC6">xuwujing's Notes</a>博客采用<a href="https://creativecommons.org/licenses/by-nc-nd/4.0/" style="color:#258FC6">创作共用保留署名-非商业-禁止演绎4.0国际许可证</a>。<br/>
本文首发于<a href="http://www.panchengming.com/" style="color:#258FC6">xuwujing's Notes</a> 博客（ <a href="http://www.panchengming.com/" style="color:#258FC6">http://www.panchengming.com/</a> ），版权所有，侵权必究。</p>
</div>
</div>

	
	</div>

    <footer class="post-footer">
      
        <div class="post-tags">
          
            <a href="/tags/java/" rel="tag"># java</a>
          
        </div>
      

      
      
      

      
        <div class="post-nav">
          <div class="post-nav-next post-nav-item">
            
              <a href="/2018/06/16/pancm85/" rel="next" title="Java基础知识回顾之六 ----- IO流">
                <i class="fa fa-chevron-left"></i> Java基础知识回顾之六 ----- IO流
              </a>
            
          </div>

          <span class="post-nav-divider"></span>

          <div class="post-nav-prev post-nav-item">
            
              <a href="/2018/07/07/pancm87/" rel="prev" title="Java进阶篇设计模式之一 ----- 单例模式">
                Java进阶篇设计模式之一 ----- 单例模式 <i class="fa fa-chevron-right"></i>
              </a>
            
          </div>
        </div>
      

      
      
    </footer>
  </article>



    <div class="post-spread">
      
    </div>
  </div>


          </div>
          


          
  <div class="comments" id="comments">
    
  </div>


        </div>
        
          
  
  <div class="sidebar-toggle">
    <div class="sidebar-toggle-line-wrap">
      <span class="sidebar-toggle-line sidebar-toggle-line-first"></span>
      <span class="sidebar-toggle-line sidebar-toggle-line-middle"></span>
      <span class="sidebar-toggle-line sidebar-toggle-line-last"></span>
    </div>
  </div>

  <aside id="sidebar" class="sidebar">
    <div class="sidebar-inner">

      

      
        <ul class="sidebar-nav motion-element">
          <li class="sidebar-nav-toc sidebar-nav-active" data-target="post-toc-wrap" >
            文章目录
          </li>
          <li class="sidebar-nav-overview" data-target="site-overview">
            站点概览
          </li>
        </ul>
      

      <section class="site-overview sidebar-panel">
        <div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
          <img class="site-author-image" itemprop="image"
               src="/images/xuwujing.png"
               alt="虚无境" />
          <p class="site-author-name" itemprop="name">虚无境</p>
           
              <p class="site-description motion-element" itemprop="description">The way of the future!</p>
          
        </div>
        <nav class="site-state motion-element">

          
            <div class="site-state-item site-state-posts">
              <a href="/archives/">
                <span class="site-state-item-count">136</span>
                <span class="site-state-item-name">日志</span>
              </a>
            </div>
          

          
            
            
            <div class="site-state-item site-state-categories">
              <a href="/categories/index.html">
                <span class="site-state-item-count">30</span>
                <span class="site-state-item-name">分类</span>
              </a>
            </div>
          

          
            
            
            <div class="site-state-item site-state-tags">
              <a href="/tags/index.html">
                <span class="site-state-item-count">59</span>
                <span class="site-state-item-name">标签</span>
              </a>
            </div>
          

        </nav>

        

        <div class="links-of-author motion-element">
          
            
              <span class="links-of-author-item">
                <a href="https://github.com/xuwujing" target="_blank" title="github">
                  
                    <i class="fa fa-fw fa-globe"></i>
                  
                  github
                </a>
              </span>
            
              <span class="links-of-author-item">
                <a href="http://blog.csdn.net/qazwsxpcm?viewmode=list" target="_blank" title="csdn">
                  
                    <i class="fa fa-fw fa-globe"></i>
                  
                  csdn
                </a>
              </span>
            
              <span class="links-of-author-item">
                <a href="https://home.cnblogs.com/u/xuwujing/" target="_blank" title="cnblogs">
                  
                    <i class="fa fa-fw fa-globe"></i>
                  
                  cnblogs
                </a>
              </span>
            
          
        </div>

        
        

        
        
          <div class="links-of-blogroll motion-element links-of-blogroll-inline">
            <div class="links-of-blogroll-title">
              <i class="fa  fa-fw fa-globe"></i>
              
            </div>
            <ul class="links-of-blogroll-list">
              
                <li class="links-of-blogroll-item">
                  <a href="http://www.woainia.site/" title="woainia" target="_blank">woainia</a>
                </li>
              
                <li class="links-of-blogroll-item">
                  <a href="http://cmsblogs.com/" title="chenssy" target="_blank">chenssy</a>
                </li>
              
                <li class="links-of-blogroll-item">
                  <a href="http://italker.imisty.cn" title="xiaowu" target="_blank">xiaowu</a>
                </li>
              
            </ul>
          </div>
        

        


      </section>

      
      <!--noindex-->
        <section class="post-toc-wrap motion-element sidebar-panel sidebar-panel-active">
          <div class="post-toc">

            
              
            

            
              <div class="post-toc-content"><ol class="nav"><li class="nav-item nav-level-2"><a class="nav-link" href="#前言"><span class="nav-number">1.</span> <span class="nav-text">前言</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#基础数据类型"><span class="nav-number">2.</span> <span class="nav-text">基础数据类型</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#修饰符"><span class="nav-number">3.</span> <span class="nav-text">修饰符</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#访问修饰符"><span class="nav-number">3.1.</span> <span class="nav-text">访问修饰符</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#非访问修饰符"><span class="nav-number">3.2.</span> <span class="nav-text">非访问修饰符</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#三大特性"><span class="nav-number">4.</span> <span class="nav-text">三大特性</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#封装"><span class="nav-number">4.1.</span> <span class="nav-text">封装</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#继承"><span class="nav-number">4.2.</span> <span class="nav-text">继承</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#多态"><span class="nav-number">4.3.</span> <span class="nav-text">多态</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#集合"><span class="nav-number">5.</span> <span class="nav-text">集合</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#List"><span class="nav-number">5.1.</span> <span class="nav-text">List</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#List的常用类"><span class="nav-number">5.1.1.</span> <span class="nav-text">List的常用类</span></a></li></ol></li><li class="nav-item nav-level-3"><a class="nav-link" href="#Map"><span class="nav-number">5.2.</span> <span class="nav-text">Map</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#Map常用类"><span class="nav-number">5.2.1.</span> <span class="nav-text">Map常用类</span></a></li></ol></li><li class="nav-item nav-level-3"><a class="nav-link" href="#Set"><span class="nav-number">5.3.</span> <span class="nav-text">Set</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#多线程"><span class="nav-number">6.</span> <span class="nav-text">多线程</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#线程的状态"><span class="nav-number">6.1.</span> <span class="nav-text">线程的状态</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#线程的创建"><span class="nav-number">6.2.</span> <span class="nav-text">线程的创建</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#线程的常用方法"><span class="nav-number">6.3.</span> <span class="nav-text">线程的常用方法</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#IO流"><span class="nav-number">7.</span> <span class="nav-text">IO流</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#字符流"><span class="nav-number">7.1.</span> <span class="nav-text">字符流</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#字节流"><span class="nav-number">7.2.</span> <span class="nav-text">字节流</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#其它"><span class="nav-number">8.</span> <span class="nav-text">其它</span></a></li></ol></div>
            

          </div>
        </section>
      <!--/noindex-->
      

      

    </div>
  </aside>


        
      </div>
    </main>

    <footer id="footer" class="footer">
      <div class="footer-inner">
        <div class="copyright" >
  
  &copy; 
  <span itemprop="copyrightYear">2021</span>
  <span class="with-love">
    <i class="fa fa-heart"></i>
  </span>
  <span class="author" itemprop="copyrightHolder">虚无境</span>
</div>


<div class="powered-by">
  由 <a class="theme-link" href="https://hexo.io">Hexo</a> 强力驱动
</div>

<div class="theme-info">
  主题 -
  <a class="theme-link" href="https://github.com/iissnan/hexo-theme-next">
    NexT.Pisces
  </a>
</div>

  <script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js">
</script>
 | 
本站总访问量<span id="busuanzi_value_site_pv"></span>次
 | 
本站访客数<span id="busuanzi_value_site_uv"></span>人次
<iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width=330 height=86 src="//music.163.com/outchain/player?type=2&id=857896&auto=0&height=66"></iframe>



        

        
      </div>
    </footer>

    
      <div class="back-to-top">
        <i class="fa fa-arrow-up"></i>
        
      </div>
    

  </div>

  

<script type="text/javascript">
  if (Object.prototype.toString.call(window.Promise) !== '[object Function]') {
    window.Promise = null;
  }
</script>









  












  
  <script type="text/javascript" src="/lib/jquery/index.js?v=2.1.3"></script>

  
  <script type="text/javascript" src="/lib/fastclick/lib/fastclick.min.js?v=1.0.6"></script>

  
  <script type="text/javascript" src="/lib/jquery_lazyload/jquery.lazyload.js?v=1.9.7"></script>

  
  <script type="text/javascript" src="/lib/velocity/velocity.min.js?v=1.2.1"></script>

  
  <script type="text/javascript" src="/lib/velocity/velocity.ui.min.js?v=1.2.1"></script>

  
  <script type="text/javascript" src="/lib/fancybox/source/jquery.fancybox.pack.js?v=2.1.5"></script>


  


  <script type="text/javascript" src="/js/src/utils.js?v=5.1.1"></script>

  <script type="text/javascript" src="/js/src/motion.js?v=5.1.1"></script>



  
  


  <script type="text/javascript" src="/js/src/affix.js?v=5.1.1"></script>

  <script type="text/javascript" src="/js/src/schemes/pisces.js?v=5.1.1"></script>



  
  <script type="text/javascript" src="/js/src/scrollspy.js?v=5.1.1"></script>
<script type="text/javascript" src="/js/src/post-details.js?v=5.1.1"></script>



  


  <script type="text/javascript" src="/js/src/bootstrap.js?v=5.1.1"></script>



  


  




	





  





  





  






  





  

  

  

  

  

  

</body>
</html>
